package LeetCode;

import Util.ListNode;

/**
 * @author attcat
 * ---做一个有趣的程序员
 * @date 2022-10-22 21:54
 * 和141 一样判断是否有环，有环返回开始入环的第一个节点
 * @description
 */
public class LeetCode_142 {


    public static void main(String[] args) { // 自定义一个环形链表
        ListNode listNode1=new ListNode();
        ListNode listNode2=new ListNode();
        ListNode listNode3=new ListNode();
        ListNode listNode4=new ListNode();
        ListNode listNode5=new ListNode();
        ListNode listNode6=new ListNode();
        listNode1.setVal(1);
        listNode2.setVal(2);
        listNode3.setVal(3);
        listNode4.setVal(4);
        listNode5.setVal(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        listNode5.setNext(listNode3);
        System.out.println(hasCycle(listNode1).val);
    }



    public static ListNode hasCycle(ListNode node ){
        if(node==null){
            return  null;
        }
        ListNode oneNode=node;
        ListNode towNode=node;
        Boolean loopExits=false;

        while (oneNode.next!=null&&towNode.next.next!=null){
            oneNode=oneNode.next;
            towNode= towNode.next.next;
            if(oneNode==towNode){
                loopExits =true;
                break;

            }

        }
        if(loopExits){
            oneNode=node;
            while(oneNode!=towNode){
                oneNode=oneNode.next;
                towNode=towNode.next;
            }
            return oneNode;
        }
       return  null;
    }
}
